#实现表crud查询
from sql.models import Clb, Gsb, Jhb, Xlb, Yhb
from sql.database import db_session
from sqlalchemy import or_,and_,desc,asc


"""
SELECT czxm,cpzh,gsb.gsmc,jhb.fcsj
    FROM clb
    INNER JOIN gsb
    ON clb.gsbGsbh=gsb.gsbh
    INNER JOIN jhb
    ON clb.bbkh=jhb.clbBbkh
    where 1=1
    ...
"""

#多表連接查詢
#1.使用sqlalchemy ORM
#2.使用原生sql語句

# 使用ORM進行多表連接查詢
def select_real_time_orm(params: dict = {}):
    db = db_session()
    
    conditions = [key == val for key, val in params.items() if val != '']
    #內連接
    #orm只有內連接、左連接
    #左連接：outerjoin
    res = db.query(Clb.bbkh,Clb.czxm,Clb.cpzh,Gsb.gsmc,Jhb.fcsj).join(Gsb,Clb.gsbGsbh==Gsb.gsbh).join(Jhb,Clb.bbkh==Jhb.clbBbkh).filter(*conditions).all()
    res = [dict(i) for i in res]  # 将User对象转化为list[dict]类型  **这里为什么不能用.__dict__**
    db.close()
    return res


# 使用原生sql進行多表連接查詢
def select_real_time_sql(params: dict = {}):
    db = db_session()
    sql = '''SELECT czxm,cpzh,gsb.gsmc,jhb.fcsj
            FROM clb
            INNER JOIN gsb
            ON clb.gsbGsbh=gsb.gsbh
            INNER JOIN jhb
            ON clb.bbkh=jhb.clbBbkh
            where 1=1
            '''
    if len(params)!=0:
        for key,val in params.items():
            sql += " and {}='{}'".format(key,val)
    print(sql)
    res = db.execute(sql)
    res = [dict(i) for i in res]  # 将User对象转化为list[dict]类型  **这里为什么不能用.__dict__**
    db.close()
    return res